iT邦幫忙

2025 iThome 鐵人賽

DAY 20
1
IT 管理

如何利用實例化需求在 GenAI 時代下自我升級系列 第 20

Day 20 Equivalence Class Testing 和 Use Case Testing 的比較

  • 分享至 

  • xImage
  •  

在軟體測試的世界裡,有兩種技巧常常被拿來比較,但很多人容易混淆:Equivalence Class Testing(等價類別測試)和 Use Case Testing(使用案例測試)。本文會透過案例,把兩者的差異、各自的強項,以及如何在 Specification by Example 裡結合運用,清楚地說明給你聽。

• Equivalence Class Testing:專注於「輸入值的邏輯分類」,用來涵蓋所有重要類型與邊界情況,避免重複、補足遺漏。
• Use Case Testing:專注於「使用者行為流程」,用來釐清情境分支與業務邏輯的行為結果。

(1) 概念差異

https://ithelp.ithome.com.tw/upload/images/20250820/201618098mteW05aY7.png

(2) 各自擅長解決的問題

A. Equivalence Class Testing
擅長找出:

  • 哪些範例值代表相同行為(避免重複測)
  • 有哪些邊界條件容易被漏掉(如 0/1/最大值)
  • 邏輯判斷錯誤,如折扣門檻、等級分類等
  • 程式沒對某些輸入類型做處理

範例:針對年齡折扣設計:
• 年齡 7 → 小學 → 4 折
• 年齡 15 → 高中 → 7 折
• 年齡 18 → 大專 → 7 折
• 年齡 5、23 → 不適用 → 原價

這些就是典型的「行為相同輸入值」歸為同一等價類的做法。

B. Use Case Testing
擅長找出:

  • 哪些情境下流程會分岔(如取消、錯誤、回到上一步)
  • 使用者可能會中斷、重試、失敗後轉向等流程異變
  • 使用者角色對行為的影響(管理員 vs 普通用戶)
  • 特定情境的例外處理是否被設計出來

範例:一個校外教學訂票流程
• 成功下單
• 人數不夠 → 被拒
• 混齡 → 折扣處理不一致
• 搭非指定車次 → 無折扣 → 使用者放棄訂票

這些是典型的「流程分支與行為反應不同」的範例。

(3) 如何在 Specification by Example 中搭配使用?

https://ithelp.ithome.com.tw/upload/images/20250820/20161809IxIGHYJVlQ.png

(4) 兩者就像鏡子與濾光鏡

• Use Case Testing 像是一面全景鏡子,幫你看清楚「使用者從進入到離開」的路線與分叉點。
• Equivalence Class Testing 像是一組濾光鏡,幫你判斷每一個欄位「這些輸入值算不算同一類」。

在設計好的驗收條件與範例時,如果你兩者都用上,才不會只寫「看起來有例子」,但實際上有一堆分支、條件沒被考慮進去。

(5) 用「高鐵校外教學優惠」來比較:

針對 哪些範例容易設計、哪些不容易,用具體例子說明差異。

A. Equivalence Class Testing:
這種方法著重「相同行為的輸入類型」,因此適合用來:找出折扣邏輯的分類條件。

(a) 容易設計的範例(代表性的等價類):

  • 依年齡或身分類型的折扣分類:
     小學生 → 4 折
     國中、高中、大專 → 7 折
     非學生或無法判別身分 → 原價
  • 人數是否達標門檻:
     人數 10 人 → 不可申請(屬於「不滿門檻」等價類)
     人數 11–24 人 → 一般團體票(屬於「普通折扣」類)
     人數 25 人以上 → 可申請 25 人優惠(屬於「大團體」等價類)
  • 搭乘車次是否為指定車次:
     指定車次 → 可申請優惠
     非指定車次 → 不適用優惠(屬於另一等價類)

這類輸入條件穩定、有明確邊界,非常適合用等價類方式劃分、測試代表值與邊界值。

(b) 不容易處理的範例(流程性問題或多角色互動):

  • 「使用者進行申請後發現不符合資格」→ 涉及使用流程,不只是資料分類。
  • 「使用者中途改變車次,折扣條件被取消」→ 涉及流程遷移與例外行為。
  • 「學校團體包含老師與混齡學生,折扣需分開計算」→ 涉及流程決策與複合條件交互。

B. Use Case Testing 擅長呈現的範例:
這種方法著重「使用者流程分支與行為差異」,因此適合針對:

(a) 容易設計的範例(流程邏輯與例外行為):

  • 流程是否成立或被中止:
     使用者輸入 10 人 → 系統顯示「人數不足,無法申請」
     老師申請,填寫團體資訊,但未選到指定車次 → 系統跳出「此條件不符校外教學折扣」
  • 角色與條件組合產生例外:
     11 位學生中包含 3 名大專、8 名小學 → 系統應如何分別計價?
     老師 + 10 位學生 → 老師算不算人數?折扣如何處理?
  • 流程的異常分支:
     車次未開放 → 無法申請 → 使用者是否收到提示?
     折扣方案變動 → 使用者是否需重新確認票價?

這些範例與條件不容易單靠「欄位值」推導,需要從使用者角度模擬整個互動流程與條件結果,非常適合用 Use Case Testing。

(b) 不容易處理的範例(單純資料分類問題):

  • 要用 Use Case 來確認「7歲 vs 8歲」對應到什麼折扣 → 太細碎,流程邏輯無變化,不如用等價類來做。
  • 折扣方案的邏輯分類(4 折 vs 7 折 vs 原價) → 不需寫一堆流程,直接用輸入分類測試即可。

小結與建議搭配方式:

https://ithelp.ithome.com.tw/upload/images/20250820/20161809K8JuirLs78.png

  • 在 SBE 討論中,先用 Use Case 列出主要流程與替代流程(釐清範例情境)
  • 接著對流程中出現的關鍵條件,用 Equivalence Class Testing 劃出測試值組
  • 結合使用,你會發現整體的範例覆蓋會更精準、更具結構

上一篇
Day 19 開立範例的方式 - UCT
下一篇
Day 21 開立範例的方式 - DTT
系列文
如何利用實例化需求在 GenAI 時代下自我升級30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言